const { body } = require('express-validator')
// 导入订单状态配置
const orderStatusConfig = require('../orderStatusConfig');

// 添加销售订单验证规则
const addSalesOrderSchema = [
    body('customer_id')
        .notEmpty()
        .withMessage('客户ID不能为空')
        .isInt()
        .withMessage('客户ID必须是整数'),
    body('order_date')
        .notEmpty()
        .withMessage('订单日期不能为空')
        .isISO8601()
        .withMessage('订单日期格式不正确'),
    body('total_amount')
        .notEmpty()
        .withMessage('订单总金额不能为空')
        .isDecimal()
        .withMessage('订单总金额必须是数字'),
    body('status')
        .optional()
        .isIn(orderStatusConfig.getStatusValues())
        .withMessage(`订单状态必须是以下值之一: ${orderStatusConfig.getStatusValues().join(', ')}`),
    body('notes')
        .optional()
        .isLength({ max: 500 })
        .withMessage('订单备注长度不能超过500个字符'),
    body('product_id')
        .notEmpty()
        .withMessage('产品ID不能为空')
        .isInt()
        .withMessage('产品ID必须是整数'),
    body('quantity')
        .notEmpty()
        .withMessage('数量不能为空')
        .isInt({ min: 1 })
        .withMessage('数量必须是大于0的整数'),
    body('unit_price')
        .notEmpty()
        .withMessage('单价不能为空')
        .isDecimal({ decimal_digits: '0,2' })
        .withMessage('单价必须是最多两位小数的数字'),
    body('subtotal')
        .notEmpty()
        .withMessage('小计不能为空')
        .isDecimal({ decimal_digits: '0,2' })
        .withMessage('小计必须是最多两位小数的数字'),
    body('baby_name')
        .optional()
        .isLength({ max: 100 })
        .withMessage('婴儿名称长度不能超过100个字符'),
    body('photo')
        .optional()
        .isIn([0, 1])
        .withMessage('照片字段必须是0或1'),
    body('hand_foot_print')
        .optional()
        .isIn([0, 1])
        .withMessage('手脚印字段必须是0或1'),
    body('baby_hair')
        .optional()
        .isIn([0, 1])
        .withMessage('胎毛字段必须是0或1'),
    body('umbilical_cord')
        .optional()
        .isIn([0, 1])
        .withMessage('脐带字段必须是0或1'),
    body('express_company')
        .optional()
        .isLength({ max: 100 })
        .withMessage('快递公司名称长度不能超过100个字符'),
    body('express_number')
        .optional()
        .isLength({ max: 100 })
        .withMessage('快递单号长度不能超过100个字符')
]

// 更新销售订单验证规则
const updateSalesOrderSchema = [
    body('order_id')
        .notEmpty()
        .withMessage('订单ID不能为空')
        .isInt()
        .withMessage('订单ID必须是整数'),
    body('customer_id')
        .optional()
        .isInt()
        .withMessage('客户ID必须是整数'),
    body('order_date')
        .optional()
        .isISO8601()
        .withMessage('订单日期格式不正确'),
    body('total_amount')
        .optional()
        .isDecimal()
        .withMessage('订单总金额必须是数字'),
    body('status')
        .optional()
        .isIn(orderStatusConfig.getStatusValues())
        .withMessage(`订单状态必须是以下值之一: ${orderStatusConfig.getStatusValues().join(', ')}`),
    body('notes')
        .optional()
        .isLength({ max: 500 })
        .withMessage('订单备注长度不能超过500个字符'),
    body('product_id')
        .optional()
        .isInt()
        .withMessage('产品ID必须是整数'),
    body('quantity')
        .optional()
        .isInt({ min: 1 })
        .withMessage('数量必须是大于0的整数'),
    body('unit_price')
        .optional()
        .isDecimal({ decimal_digits: '0,2' })
        .withMessage('单价必须是最多两位小数的数字'),
    body('subtotal')
        .optional()
        .isDecimal({ decimal_digits: '0,2' })
        .withMessage('小计必须是最多两位小数的数字'),
    body('baby_name')
        .optional()
        .isLength({ max: 100 })
        .withMessage('婴儿名称长度不能超过100个字符'),
    body('photo')
        .optional()
        .isIn([0, 1])
        .withMessage('照片字段必须是0或1'),
    body('hand_foot_print')
        .optional()
        .isIn([0, 1])
        .withMessage('手脚印字段必须是0或1'),
    body('baby_hair')
        .optional()
        .isIn([0, 1])
        .withMessage('胎毛字段必须是0或1'),
    body('umbilical_cord')
        .optional()
        .isIn([0, 1])
        .withMessage('脐带字段必须是0或1'),
    body('express_company')
        .optional()
        .isLength({ max: 100 })
        .withMessage('快递公司名称长度不能超过100个字符'),
    body('express_number')
        .optional()
        .isLength({ max: 100 })
        .withMessage('快递单号长度不能超过100个字符')
]

module.exports = { 
    addSalesOrderSchema,
    updateSalesOrderSchema
}